查看原文
其他

翻译包含HTML样式的XML文档 (CDATA篇)

可爱的冬梅 职业译员玩转翻译技术
2024-09-09

在上一篇文中,我们说明了,如果 XML 文中包含实体和 HTML 样式的内容,应该如何翻译。

那么这一篇,我会讲另一种XML 中包含 HTML 的文本,也就是包含 CDATA 的文档。

包含CDATA的XML也是应用程序本地化中常遇到的一种文档格式。

我们先来看它长什么样子:

我们发现它是符合 XML 标准的:

  • 第一行说明语句:<?xml version="1.0" standalone="no"?>

  • 第二行和最后一行根元素:<doc>

  • 中间有<para><doc>的子元素。

但是也有点不一样,就是多了一些<![CDATA[...]]的东西。

这就是 CDADA 文档。

那么它到底是个什么,又该如何翻译呢?

今天带大家看看~

如果我讲的不对,还请各位来批评啦~~~

什么是 CDADA?

我们知道,计算机在读取编程文件的时候,是一行一行来读的。

我用前面的 XML 文档为例。

计算机就会先读取第一行:<?xml version...?>,然后计算机就知道了:“哦,原来是个xml文档,要识别为XML文档~”

然后继续往下读<sample>“哦,是个示例呀~”。

可是如果遇到走不通的地方,计算机读不懂,就会提示你:“哎呀,出错惹,我读不懂啊”。(这就是我们经常说的报错。)

可是为什么会有报错呢?可能的原因有:

  1. 你的代码逻辑有问题。或者

  2. 这是个XML文档,你写的不是XML样式,所以你跟它说,它确实读不懂。(就像你跟一个不懂汉语的人说汉语,说的明明都是人话,就是无法交流。)

第一个原因我就不说了,自身原因自己找找看咯~

第二个原因,怎么解决呢?

  • 改成它能懂得语言;——比如我们前面讲的可以改为实体,如果'读不懂,就改为&apos;

  • 既然读不懂,就别难为计算机了,跳过吧。——比如通过 CDATA 就是一种解决方法。

怎么解决呢?我们看看 CDATA 是什么。

CDATA 的全名是 character data。

在 XML 文档中,文本均会被计算机读取和解析,但是被 CDATA 包起来的文本除外。

比如某些代码,包含像 <>& 等字符,我们可以将其定义为 CDATA,这样计算机就不会读这部分内容,也就会减少出错了。

CDATA 部分<![CDATA[" 开始,由 "]]>结束

我们还是以本文开篇的 CDATA 文档为例,这次我们用 Chrome 打开看一下。

我们发现,由 CDATA 包起来的内容是没有读取的哦~

计算机想:“遇到 CDATA,我干脆不读了,就不出错了嘛对不对~”。

是的,的确是这样,可是也不对。

我们其实想要的结果是:

我不管你是什么Java XML HTML 语言,你还是要读的,也还是要翻译的。

(当然了,辛辛苦苦写出来肯定是要用的,既然要用,当然要翻译了。)

这可如何是好呢?遇到 CDATA 该怎么翻译呢?

不要着急,都可以解决~

如何翻译包含CDATA 的XML?

我们先看源文档:

其实不是不能读,是不能用 XML 读了。要用它支持的语言读。

就像我们搞翻译一样,如果遇到原文本(英语)中夹杂了法语,难道你不翻译了?当然不是,不是不翻译了,是不把原文本作为英语翻译,而是要翻法语。

所以:如果要翻译出 CDATA 的部分,必须要知道 CDATA 包起来的部分是什么。

在这个例子中,我们发现,其实被 CDADA 包起来的内容是 HTML 样式,像<p><b>都是,当然也有实体,像&amul;&ouml;

所以这就简单了嘛,我们还是用层叠过滤器

  1. 既然是XML文档,那第一层过滤器还是用 XML 过滤器

  2. 既然 CDATA 部分是 HTML 样式,那第二层我们就用 HTML 过滤器

当当当当~

我丢~竟然在最后一行有个漏网之鱼:

####NAME####

  1. 没关系,我继续加过滤器,加一层正则表达式标注器,标记为标签。

    搞定!该是段落识别为段落,该是标签识别为标签,该是特殊字符的还原特殊字符~

    真棒!

记得怎么用正则标注标签吗?不记得看这里回顾:正则篇(六):用正则将文本标记为标签

操作视频

上完整操作:

好啦~今日分享结束~你学会了吗~

后面会继续分享:DTD与XML文档,继续关注啦~(我也不知道什么时候写好~但是我保证很快惹~)

你还想学什么,欢迎来问~


往期精选

翻译包含HTML样式的XML文档(实体篇)

如何翻译单语XML文档?

认识XML文档(二)XML的元素、标签、文本、属性和实体

认识XML文档(一)什么是XML文档?

不会宏命令?试试用Transtool实现段段对照

一名职业译员,在拿到翻译任务时,应该和PM确认哪些内容?

如何导出段段对照的双语译文

继续滑动看下一个
职业译员玩转翻译技术
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存